Array Concatenation in an Integrated Circuit Design

ABSTRACT

Mechanisms are provided in a design environment for array concatenation. The design environment comprises one mechanism to concatenate arrays with enable- and address-compatible ports, thereby reducing the number of arrays in a netlist. The design environment comprises another mechanism to migrate read ports from one array to another based upon compatible enable-, address-, and data-compatible write ports, thereby reducing the number of arrays in a netlist. The design environment comprises yet another mechanism to eliminate unnecessary arrays.

BACKGROUND

The present application relates generally to an improved data processingapparatus and method and more specifically to mechanisms for arrayconcatenation in an integrated circuit design.

Logic designs used to represent hardware, software, or hybrid systemsmay be represented using a variety of formats. Example formats includehardware description languages (HDLs), higher-level languages such asSystemC, or lower-level formats such as netlists. There are numerousapplication domains in which it is advantageous to reduce the size ofdesign representations. For example, logic synthesis and design aidsoften attempt to yield more compact representations that lend themselvesto higher quality silicon or assembly code.

There are numerous application domains in which it is advantageous toreduce the size of memory array representations. For example, logicsynthesis often attempts to yield more compact representations that lendthemselves to higher-quality silicon or assembly code. Smaller arrayrepresentations may directly factor into this goal, particularly forincreasingly common intellectual property reuse and migration integratedcircuit flows for which some aspects of a design may be irrelevant.

Decreasing the size of memory arrays also indirectly helps synthesisflows through helping simulation and verification flows, in thatsynthesis often requires the use of such algorithms during itsprocessing. In particular, logic simulators often face substantialperformance overheads in evaluating array ports, requiring hash tableaccesses to represent the contents of large arrays.

Hardware accelerators often have limitations on the number of arrays,and read/write port connectivity, that may be supported. Reducing arraysize may be mandatory to enable the application of acceleration. Formalverification techniques are often very sensitive to the size and numberof ports. For example, techniques to use satisfiability solvers toanalyze the behavior of arrays over time often directly compare the readaddress of each read port for a given time frame to the write address ofevery write port for every prior time frame. Such modeling entailsquadratic complexity with respect to the number of read and write ports.

SUMMARY

In one illustrative embodiment, a method, in a data processing system,is provided for minimizing memory array representations. The methodcomprises receiving, in the data processing system, an integratedcircuit design having a plurality of memory arrays. The method furthercomprises reducing, by the data processing system, a number of memoryarrays in the integrated circuit design to form a reduced integratedcircuit design. The method further comprises performing, by the dataprocessing system, synthesis or verification on the reduced integratedcircuit design.

In other illustrative embodiments, a computer program product comprisinga computer useable or readable medium having a computer readable programis provided. The computer readable program, when executed on a computingdevice, causes the computing device to perform various ones, andcombinations of, the operations outlined above with regard to the methodillustrative embodiment.

In yet another illustrative embodiment, a system/apparatus is provided.The system/apparatus may comprise one or more processors and a memorycoupled to the one or more processors. The memory may compriseinstructions which, when executed by the one or more processors, causethe one or more processors to perform various ones, and combinations of,the operations outlined above with regard to the method illustrativeembodiment.

These and other features and advantages of the present invention will bedescribed in, or will become apparent to those of ordinary skill in theart in view of, the following detailed description of the exampleembodiments of the present invention.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

The invention, as well as a preferred mode of use and further objectivesand advantages thereof, will best be understood by reference to thefollowing detailed description of illustrative embodiments when read inconjunction with the accompanying drawings, wherein:

FIG. 1 is a block diagram illustrating an example design environment inaccordance with an illustrative embodiment;

FIG. 2 is a flowchart illustrating operation of a mechanism foreliminating redundant columns in a memory array in accordance with anillustrative embodiment;

FIG. 3 depicts example pseudo-code for the operations illustrated inFIG. 2 in accordance with an illustrative embodiment;

FIG. 4 is a flowchart illustrating operation of a mechanism foreliminating redundant ports in a memory array in accordance with anillustrative embodiment;

FIG. 5 depicts example pseudo-code for the operations illustrated inFIG. 4 in accordance with an illustrative embodiment;

FIGS. 6A and 6B are flowcharts illustrating operation of a mechanism forcoalescing ports by equivalent address in a memory array in accordancewith an illustrative embodiment;

FIG. 7 depicts example pseudo-code for the operations illustrated inFIGS. 6A and 6B in accordance with an illustrative embodiment;

FIG. 8 is a flowchart illustrating operation of a mechanism forcoalescing ports by orthogonal enable for a memory array in accordancewith an illustrative embodiment;

FIG. 9 depicts example pseudo-code for the operations illustrated inFIG. 8 in accordance with an illustrative embodiment;

FIG. 10 is a flowchart illustrating operation of a mechanism forcoalescing arrayouts due to “don't care” conditions in a memory array inaccordance with an illustrative embodiment;

FIG. 11 depicts example pseudo-code for the operations illustrated inFIG. 10 in accordance with an illustrative embodiment;

FIG. 12 is a flowchart illustrating operation of a mechanism to tie readenables for a memory array in accordance with an illustrativeembodiment;

FIG. 13 depicts example pseudo-code for the operations illustrated inFIG. 12 in accordance with an illustrative embodiment;

FIG. 14 is a flowchart illustrating operation of a mechanism forbypassing write-before-read ports in a memory array in accordance withan illustrative embodiment;

FIG. 15 depicts example pseudo-code for the operations illustrated inFIG. 14 in accordance with an illustrative embodiment;

FIG. 16 is a flowchart illustrating operation of a mechanism forconcatenation of memory arrays in accordance with an illustrativeembodiment;

FIG. 17 depicts example pseudo-code for the operations illustrated inFIG. 16 in accordance with an illustrative embodiment;

FIG. 18 is a flowchart illustrating operation of a mechanism formigrating array read ports in accordance with an illustrativeembodiment;

FIGS. 19A and 19B depict example pseudo-code for the operationsillustrated in FIG. 18 in accordance with an illustrative embodiment;

FIG. 20 is a flowchart illustrating operation of a mechanism to minimizeaddress bits in a memory array in accordance with an illustrativeembodiment;

FIGS. 21A and 21B example pseudo-code for the operations illustrated inFIG. 20 in accordance with an illustrative embodiment;

FIG. 22 is a flowchart illustrating operation of a mechanism for arraydeletion in accordance with an illustrative embodiment;

FIG. 23 depicts example pseudo-code for the operations illustrated inFIG. 22 in accordance with an illustrative embodiment;

FIG. 24 depicts a pictorial representation of an example distributeddata processing system in which aspects of the illustrative embodimentsmay be implemented; and

FIG. 25 is a block diagram of an example data processing system in whichaspects of the illustrative embodiments may be implemented.

DETAILED DESCRIPTION

The illustrative embodiments provide mechanisms in a design environmentfor minimizing memory array representations for enhanced synthesis andverification. In one embodiment, the design environment comprises amechanism to compress the width of arrays using disconnected pininformation. In another embodiment, the design environment comprises amechanism to simplify the enable conditions of array ports using “don'tcare” computations. In yet another embodiment, the design environmentcomprises a mechanism to reduce address pins from an array throughanalysis of limitations of readable addresses.

The illustrative embodiments provide mechanisms in a design environmentfor eliminating, coalescing, or bypassing ports. In one embodiment, thedesign environment comprises a mechanism to eliminate unnecessary portsin arrays using disabled and disconnected pin information. In anotherembodiment, the design environment comprises a mechanism to combine andreduce the number of array ports using address comparisons. In anotherembodiment, the design environment comprises a mechanism to combine andreduce the number of array ports using disjoint enable comparisons. Inyet another embodiment, the design environment comprises a mechanism tocombine and reduce the number of array ports using “don't care”computations. In another embodiment, the design environment comprises amechanism to reduce the number of array ports through bypassingwrite-to-read paths around arrays.

The illustrative embodiments also provide mechanisms in a designenvironment for array concatenation. In one embodiment, the designenvironment comprises a mechanism to concatenate arrays with enable- andaddress-compatible ports, thereby reducing the number of arrays in anetlist. In another embodiment, the design environment comprises amechanism to migrate read ports from one array to another based uponcompatible enable-, address-, and data-compatible write ports, therebyreducing the number of arrays in a netlist. In yet another embodiment,the design environment comprises a mechanism to eliminate unnecessaryarrays.

FIG. 1 is a block diagram illustrating an example design environment inaccordance with an illustrative embodiment. When designing an integratedcircuit, a designer may first write a high-level description of thecircuit in a hardware description language (HDL), such as VeryHigh-Speed Integrated Circuit (VHSIC) Hardware Description Language(VHDL) or Verilog. In electronics, a hardware description language maybe any language from a class of computer languages and/or programminglanguages for formal description of electronic circuits, and morespecifically, digital logic. A HDL can describe the operation of acircuit, its design and organization, and tests to verify its operationby means of simulation. Most designs begin as a set of requirements or ahigh-level architectural diagram. The designer often prototype controland decision structures in flowchart applications or enter them in astate-diagram editor. The process of writing the HDL description ishighly dependent on the nature of the circuit and the designer'spreference for coding style.

Design environment 110 may include editing tool 112, simulation tool114, verification tool 116, and graphical user interface (GUI) 118. Acircuit designer may create and edit an integrated circuit (IC) design,which may be written in a high-level HDL, such as VHSIC or Verilog, andstore the IC design in design storage 102. The circuit designer mayinteract with editing tool 112 via graphical user interface (GUI) 118using input device 122 and output device 124.

Simulation tool 114 simulates operation of an IC circuit from designstorage 102. The designer may control simulation tool 114 via GUI 118using input device 122 and output device 124. Simulation tool 114 storestrace results in trace storage 104. Simulation tool 114 is a primarytool for verifying the logical correctness of a design. In many caseslogic simulation is the first activity performed in the process oftaking a hardware design from concept to realization. Modern hardwaredescription languages are both simulatable and synthesizable.

Simulation is a natural way for the designer to get feedback about adesign. Because simulation tool 114 executes as a program, the designerinteracts with the simulation using the vocabulary and abstractions ofthe design. There is no layer of translation to obscure the behavior ofthe design. The level of effort required to debug and then verify thedesign is proportional to the maturity of the design. That is, early inthe life of the design, the designer may find bugs and incorrectbehavior quickly. Simulation is completely general; any hardware designcan be simulated. The only limits are time and computer resources indesign environment 110.

Verification tool 116 allows the designer to verify an IC design fromdesign storage 102. A manufacturer may establish and maintain proceduresfor verifying an IC design. Design verification confirms that the designoutput meets the design input requirements. Verification tool 116compares design outputs to design input requirements to determinewhether the requirements have been met. The designer may controlverification tool 116 via GUI 118 using input device 122 and outputdevice 124. Formal and semiformal verification techniques are powerfultools for the construction of correct logic designs. They have the powerto expose even the most probabilistically uncommon scenario that mayresult in a functional design failure, and ultimately have the power toprove that the design is correct, i.e. that no failing scenario exists.

A netlist contains a directed graph with vertices representing gates andedges representing interconnections between those gates. The gates haveassociated functions, such as constants, primary inputs (hereafterreferred to as RANDOM gates), combinational logic such as AND gates,simple sequential elements (hereafter referred to as registers), andmemory arrays. Registers have two associated components: theirnext-state functions and their initial-value functions. The netlistrepresents both components as other gates in the graph. Semantically,for a given register, the value appearing at its initial-value gate attime “0” (“initialization” or “reset” time) is applied as the value ofthe register itself; the value appearing at its next-state function attime “i” is applied to the register itself at time “i+1”.

Memory arrays represent two-dimensional grids of registers, referred toas “cells,” arranged as rows vs. columns. A circuit reads or writes thecontents of memory arrays via dedicated “ports” of three types: readports, initialization ports, and write ports. Ports of these three typeshave three components: an address, a data vector, and an enable. Theaddress indicates which row is to be accessed. The enable indicateswhether or not the given port is being accessed. The data vectorindicates what value is to be written to the given row (if enabled) inthe case of a write port or the contents present for the given row of anenabled read. Initialization ports are specialized write ports that arerelevant only at time 0.

Memory arrays have a pre-defined number of rows and columns, a defaultinitial value (in case of an unwritten row is read), and an indicationof read-before-write vs. write-before read behavior. The latter isrelevant in case of a concurrent read and write to the same address:read-before-write will not return the concurrent write data, whereaswrite-before-read will. The memory array will often conservativelyrandomize data contents of a read port in case the read enable is notactive, or in case the read row is “out-of-bounds,” i.e. the readaddress is larger than the pre-defined number of rows for the array.Read port data pins are the only “outputs” of arrays. All other pins are“inputs.” Read port data pins are sometimes referred to as “arrayouts.”

Write ports and initialization ports have a pre-defined precedencedefining which values will persist in case of multiple concurrent writesor initializations to the same address. Port precedence is irrelevantfor read ports; every concurrent read to a given address returns thesame data, which is the highest-priority write to the given address inthe case of write-before-read, else the highest-priority most recentwrite to that address if any exist, else the highest-priorityinitialization to that address if any such initialization ports exist,else the default initial value.

Certain gates in a netlist are labeled as “targets.” Targets correlateto the properties one wishes to verify; the goal of the verificationprocess is to find a way to drive a “1” to a target node (and togenerate a “trace” illustrating this scenario if one is found), or toprove that no such assertion of the target is possible.

To establish a convention for referring to components of an array, letR_1, . . . , R_m represent the read ports, W_1, . . . , W_n representthe write ports in order of decreasing precedence, and let I_1, . . . ,I_o represent the initialization ports in order of decreasingprecedence. For a given port P_i, where P may be R, W, or I), let P_ienable refer to the gate that is connected to the enable pin of thatport, P_i.address(0), . . . , P_i.address(p) represent the gatesconnected to the address pins of that port with 0 being the mostsignificant bit, and P_i.data(0), . . . , P_i.data(q) be the gatesconnected to the data pins of that port. It is possible for some datapins to be disconnected from the ports; for read ports, this means thatthe corresponding column bit is not relevant to the netlist, whereas forwrite and initialization ports, this means that the corresponding columnbit is not updated by a corresponding write or initialization operation.For a given arrayout a_i, let a_i.array represent the array to which a_iis associated, let a_i.port represent the port to which that arrayout isconnected, and let a_i.column represent the column of the array itsamples. In other words, a_i.port.data(a_i) column=a_i. Thewrite-before-read attribute of an array is referred to as array.type.

The illustrative embodiments use a variety of transformations to reducethe size of array representations themselves. These transformations areuseful to enhance a variety of applications. It is noteworthy that thesetransformations are furthermore enhanced by, and enhance, theeffectiveness of other transformations. For example, applying thesetransformations to a netlist that has been reduced by other techniquesmay enable even greater reductions of these array-simplificationtransformations. Additionally, the netlist resulting from thesearray-simplifying transformations may enable greater reductions throughother techniques.

As will be appreciated by one skilled in the art, the present inventionmay be embodied as a system, method, or computer program product.Accordingly, aspects of the present invention may take the form of anentirely hardware embodiment, an entirely software embodiment (includingfirmware, resident software, micro-code, etc.) or an embodimentcombining software and hardware aspects that may all generally bereferred to herein as a “circuit,” “module” or “system.” Furthermore,aspects of the present invention may take the form of a computer programproduct embodied in any one or more computer readable medium(s) havingcomputer usable program code embodied thereon.

Any combination of one or more computer readable medium(s) may beutilized. The computer readable medium may be a computer readable signalmedium or a computer readable storage medium. A computer readablestorage medium may be, for example, but not limited to, an electronic,magnetic, optical, electromagnetic, infrared, or semiconductor system,apparatus, device, or any suitable combination of the foregoing. Morespecific examples (a non-exhaustive list) of the computer readablemedium would include the following: an electrical connection having oneor more wires, a portable computer diskette, a hard disk, a randomaccess memory (RAM), a read-only memory (ROM), an erasable programmableread-only memory (EPROM or Flash memory), an optical fiber, a portablecompact disc read-only memory (CDROM), an optical storage device, amagnetic storage device, or any suitable combination of the foregoing.In the context of this document, a computer readable storage medium maybe any tangible medium that can contain or store a program for use by orin connection with an instruction execution system, apparatus, ordevice.

A computer readable signal medium may include a propagated data signalwith computer readable program code embodied therein, for example, in abaseband or as part of a carrier wave. Such a propagated signal may takeany of a variety of forms, including, but not limited to,electro-magnetic, optical, or any suitable combination thereof. Acomputer readable signal medium may be any computer readable medium thatis not a computer readable storage medium and that can communicate,propagate, or transport a program for use by or in connection with aninstruction execution system, apparatus, or device.

Computer code embodied on a computer readable medium may be transmittedusing any appropriate medium, including but not limited to wireless,wireline, optical fiber cable, radio frequency (RF), etc., or anysuitable combination thereof.

Computer program code for carrying out operations for aspects of thepresent invention may be written in any combination of one or moreprogramming languages, including an object oriented programming languagesuch as Java™, Smalltalk™, C++, or the like, and conventional proceduralprogramming languages, such as the “C” programming language or similarprogramming languages. The program code may execute entirely on theuser's computer, partly on the user's computer, as a stand-alonesoftware package, partly on the user's computer and partly on a remotecomputer, or entirely on the remote computer or server. In the latterscenario, the remote computer may be connected to the user's computerthrough any type of network, including a local area network (LAN) or awide area network (WAN), or the connection may be made to an externalcomputer (for example, through the Internet using an Internet ServiceProvider).

Aspects of the present invention are described below with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems) and computer program products according to the illustrativeembodiments of the invention. It will be understood that each block ofthe flowchart illustrations and/or block diagrams, and combinations ofblocks in the flowchart illustrations and/or block diagrams, can beimplemented by computer program instructions. These computer programinstructions may be provided to a processor of a general purposecomputer, special purpose computer, or other programmable dataprocessing apparatus to produce a machine, such that the instructions,which execute via the processor of the computer or other programmabledata processing apparatus, create means for implementing thefunctions/acts specified in the flowchart and/or block diagram block orblocks.

These computer program instructions may also be stored in a computerreadable medium that can direct a computer, other programmable dataprocessing apparatus, or other devices to function in a particularmanner, such that the instructions stored in the computer readablemedium produce an article of manufacture including instructions thatimplement the function/act specified in the flowchart and/or blockdiagram block or blocks.

The computer program instructions may also be loaded onto a computer,other programmable data processing apparatus, or other devices to causea series of operational steps to be performed on the computer, otherprogrammable apparatus, or other devices to produce a computerimplemented process such that the instructions which execute on thecomputer or other programmable apparatus provide processes forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks.

FIG. 2 is a flowchart illustrating operation of a mechanism foreliminating redundant columns in a memory array in accordance with anillustrative embodiment. Operation begins, and the mechanism receives amemory array, arr (block 202). For each column in the array (block 204),the mechanism checks for a read port in the array that has the columnconnected (block 206), and the mechanism determines whether array has aread port that has the column connected (block 208). If not, themechanism compresses the column out of the array by projecting thatcolumn out of the data pins of each port (block 210). Thereafter, or ifthe mechanism determines that the array does have a read port that hasthe column connected in block 208, the mechanism considers the nextcolumn (block 212), and returns to block 204 to repeat the loop for thenext column. If the mechanism has considered the last column in block212, then operation ends.

FIG. 3 depicts example pseudo-code for the operations illustrated inFIG. 2 in accordance with an illustrative embodiment. The mechanismreduces the width of arrays by eliminating columns that cannot be read.Such conditions may arise under a variety of conditions. For example,some arrays may not be referenced down to column 0, e.g., referencingonly range 2 to 4. This transformation compresses an otherwisefive-column wide array down to three bits. Furthermore, some propertiesmay only rely upon reading a subset of an array's columns, allowing arelated compression. Additionally, through other reduction techniques,the design environment may merge some arrayouts, enabling thecorresponding column to be eliminated.

FIG. 4 is a flowchart illustrating operation of a mechanism foreliminating redundant ports in a memory array in accordance with anillustrative embodiment. Operation begins, and the mechanism receives anarray, arr (block 402). For each port type (block 404) and for each portof a given type (block 406), the mechanism determines whether the portcan be enabled (block 408). If the port can never be enabled, themechanism determines whether the port is a read port (block 410). If theport is a read port, the mechanism converts each arrayout to a RANDOMgate (block 412). Thereafter, or if the mechanism determines that theport is not a read port in block 410, the mechanism deletes the port(block 414). Thereafter, or if the port can be enabled in block 408, themechanism considers the next port (block 416), and returns to block 406to repeat the loop for the next port. If the mechanism has consideredthe last port in block 416, then the mechanism considers the next porttype (block 418), and returns to block 404 to repeat the loop for thenext port type. If the mechanism has considered the last port type inblock 418, then operation ends.

FIG. 5 depicts example pseudo-code for the operations illustrated inFIG. 4 in accordance with an illustrative embodiment. The mechanismeliminates redundant ports that either can never be enabled or aredisconnected. This mechanism is particularly useful in combination withother transformations that collectively eliminate pin connections inarrays.

FIGS. 6A and 6B are flowcharts illustrating operation of a mechanism forcoalescing ports by equivalent address in a memory array in accordancewith an illustrative embodiment. Operation begins, and the mechanismreceives an array, an (block 602). For each port, T_i, of each port type(block 604) and for each higher precedence port, T_j (block 606), themechanism determines whether T_i and T_j have equal addresses (block608). If the mechanism determines that T_i and T_j have equal addresses,then the mechanism determines whether T_i is enabled no more frequentlythan T_j (block 610). For a write or init port, this indicates that T_jwould overwrite T_i. More specifically, although not shown in FIG. 6Afor simplicity, in block 610, the mechanism determines whether T_joverwrites T_i by determining whether T_i enable implies T_j enable ORthe port type is read OR there is no intermediate port that mayconcurrently write to the same address as T_i. If T_j does not overwriteT_i, or if the addresses are not equal in block 608, then the mechanismconsiders the next higher precedent port (block 612), and returns toblock 606 to repeat the loop for the next higher precedent port. If themechanism has considered the last higher precedent port in block 612,then the mechanism considers the next port (block 614) and returns toblock 604 to repeat the loop for the next port. If the mechanism hasconsidered the last port in block 614, then operation ends.

Returning to block 610, if T_i is enabled more than T_j, the mechanismdetermines whether the port is a read port (block 616). If the port is aread port, then for each column in the read port (block 618 in FIG. 6B),the mechanism determines whether the column is connected for T_j (block620). If the mechanism determines that the column is not connected forT_j, then the mechanism considers the next column for the read port(block 622) and returns to block 618 to repeat the loop for the nextcolumn.

If the mechanism determines that the column is connected for T_j inblock 620), then the mechanism determines whether the column isconnected for T_i (block 624). If the column is not connected for T_i,then the mechanism moves T_j data for the column to T_i data (block626), and the mechanism considers the next column for the read port(block 622) and returns to block 618 to repeat the loop for the nextcolumn.

If the mechanism determines that the column is connected for T_i inblock 624, then the mechanism determines whether T_i enable implies T_jenable, meaning when T_i enable is asserted, then T_j enable is alsoasserted (block 628). If T_i enable implies T_j enable, then themechanism merges T_j data onto T_i data for the column (block 630), andthe mechanism considers the next column for the read port (block 622)and returns to block 618 to repeat the loop for the next column.

If the mechanism determines that T_i enable does not imply T_j enable inblock 628, then the mechanism determines whether T_j enable implies T_ienable (block 632). If T_j enable implies T_i enable, then the mechanismmerges T_i data onto T_j data for the column (block 634), and themechanism considers the next column for the read port (block 622), andreturns to block 618 to repeat the loop for the next column.

If the mechanism determines that T_j enable does not imply T_i enable inblock 632, then the mechanism determines whether a read port, R_T_i, hasbeen synthesized (block 636). If a read port has not been synthesized,the mechanism creates a read port R_T_i (block 638), sets the enable forR_T_i to T_i enable OR T_j enable (block 640), and sets the address forR_T_i to the address for T_i (block 642). Thereafter, or if R T_i hasbeen created in block 636, the mechanism creates a fresh arrayout forR_T_i data for the given column (block 644). Then, the mechanism mergesT_j data onto R_T_i data for the column (block 646) and merges T_i dataonto R_T_i data for the column (block 648). Thereafter, the mechanismconsiders the next column for the read port (block 622), and returns toblock 618 to repeat the loop for the next column.

If the mechanism has considered the last column in block 622, then themechanism proceeds to block 612 to consider the next higher precedenceport and repeat the loop.

Returning to block 616, if the port is a non-read port, the mechanismdetermines whether a strand of T_j data is connected that isdisconnected for T_i data (block 650). If there is a strand of T_j datathat is connected that is disconnected for T_i data, then the mechanismsets T_i enable equal to T_i enable OR T_j enable (block 652). Then, themechanism considers the next higher precedence port (block 612) andreturns to block 606 to repeat the loop for the next higher precedentport.

If the mechanism determines that no strand of T_j data is connected thatis disconnected for T_i data in block 650, for each column (block 654),the mechanism determines whether T_i data is connected for the column(block 656). If T_i data is connected for the column, then the mechanismdetermines whether T_j data is connected (block 658). If T_j data is notconnected for the column, or T_i data is not connected for the column inblock 656, then the mechanism considers the next column (block 660) andreturns to block 654 to repeat the loop for the next column. If T_i datais connected for the given column in block 656 and T_j data is connectedfor the given column in block 658, then the mechanism sets T_i data forthe column equal to T_j data for the column if T_j is enabled or T_idata for the column if T_j is not enabled (block 662). The mechanismthen disconnects T_j data for the column (block 664). Thereafter, themechanism considers the next column (block 660) and returns to block 654to repeat the loop for the next column. If the mechanism has consideredthe last column in block 660, then the mechanism sets T_i enable equalto T_i enable OR T_j enable (block 652) and proceeds to block 612 toconsider the next higher precedence port.

FIG. 7 depicts example pseudo-code for the operations illustrated inFIGS. 6A and 6B in accordance with an illustrative embodiment. Thismechanism attempts to reduce the number of ports of an array byidentifying ports that have equivalent addresses and are reducibleconsidering port types and enables. For initialization and write ports,if a higher-precedence port is guaranteed to write the same addresswhenever a lower-precedence port is writing to that address, themechanism may eliminate the lower-precedence. Alternatively, if theenables may be implied but the mechanism can determine that nointermediate port may concurrently write to the same address, themechanism may use the higher-precedence port to subsume thelower-priority port through ORing the two write enables and using amultiplexor to select among the proper data. For read ports, if theenable of either equivalent address port is implied by the other, themechanism may merge the implied port's arrayouts onto the other.Otherwise, the mechanism must create a new port that produces the properdata in either enable case (the OR of the two ports' enables; forsimplicity, always reading is another possibility), and the mechanismmay merge both existing ports' arrayouts onto the new port.

FIG. 8 is a flowchart illustrating operation of a mechanism forcoalescing ports by orthogonal enable for a memory array in accordancewith an illustrative embodiment. Operation begins, and receives anarray, an (block 802). For each port, T_i, of each port type (block 804)and for each lower precedence port, T_j (block 806), the mechanismdetermines whether T_i and T_j are enabled (block 808). If T_i and T_jare both enabled, the mechanism considers the next lower precedence port(block 818) and returns to block 806 to repeat the loop for the nextlower precedence port. If the mechanism has considered the last lowerprecedence port in block 818, then the mechanism considers the next port(block 820) and returns to block 804 to repeat the loop for the nextport. If the mechanism has considered the last port in block 820, thenoperation ends.

Returning to block 808, if the mechanism determines that T_i and T_j arenot both enabled, then the mechanism sets the address of T_i to the T_iaddress if T_i is enabled or to the T_j address if T_i is not enabled(block 810). Then, the mechanism determines whether the port is a readport (block 812). If the port is a non-read port, the mechanism migrateswrite pins from T_j to T_i as long as no intermediate port mayconcurrently write to the same address of T_i (block 814). Then, themechanism deletes port T_i (block 816). Thereafter, the mechanismconsiders the next lower precedence port (block 818) and returns toblock 806 to repeat the loop for the next lower precedence port.

Returning to block 812, if the port is a read port, then the mechanismcreates a read port R_T_i (block 822), sets the enable for R_T_i to T_ienable OR T_j enable (block 824), and sets the address for R_T_i to theaddress for T_i (block 826). Thereafter, for each column (block 828),the mechanism creates a fresh arrayout for R_T_i data for the givencolumn (block 830). Then, the mechanism merges T_j data onto R_T_i datafor the column if T_j data for the column is connected (block 832) andmerges T_i data onto R_T_i data for the column if T_i data for thecolumn is connected (block 834). Thereafter, the mechanism considers thenext column for the read port (block 836), and returns to block 828 torepeat the loop for the next column. If the mechanism has considered thelast column in block 836, then operation proceeds to block 816 to deleteport T_i.

FIG. 9 depicts example pseudo-code for the operations illustrated inFIG. 8 in accordance with an illustrative embodiment. This mechanismattempts to merge array ports, although unlike the mechanism of FIGS.6A, 6B, and 7, which merges based upon equivalent addresses, thismechanism looks for orthogonal enables, meaning that the enable signalson two ports can never be asserted simultaneously. If two ports haveorthogonal enables, at most one of the two ports needs to access thecontents of the array at any point in time, hence the mechanism maymerge the two ports.

For initialization and write ports, the mechanism migrates the writepins from a lower-precedence port T_j to a higher-precedence port T_i aslong as no intermediate port may concurrently write to the same addressof T_i. For read ports, similar to the mechanism of FIGS. 6A, 6B, and 7,the mechanism creates a fresh read port that reads the enabled addressof the array and merges the existing ports onto the new read port. It isnoteworthy that the mechanism may merge an arbitrarily large set ofpair-wise disjoint-enable read ports onto the same new array port, asfollows from repeated application of this pair-wise transformation.

FIG. 10 is a flowchart illustrating operation of a mechanism forcoalescing arrayouts due to “don't care” conditions in a memory array inaccordance with an illustrative embodiment. Operation begins, and themechanism receives an array, an (block 1002). For each read port R_i(block 1004), the mechanism identifies a mask, M, for which allconnected arrayouts of port R_i are masked with respect to some fanoutboundary (block 1006). The mechanism stores the mask, R_i.M (block1008). Then, the mechanism considers the next read port (block 1010) andreturns to block 1004 to repeat the loop for the next read port.

If the mechanism has considered the last read port in block 1010, thenfor each pair of read ports, R_i and R_j (block 1012), the mechanismdetermines whether the compliment of R_i.M AND the compliment of R_j.Mis equivalent to zero (block 1014). If NOT(R_i.M) AND NOT(R_j.M) isequivalent to zero, then the mechanism merges the read ports (block1016). In one example embodiment, the mechanism merges read ports usingthe synthesize read port technique described above with respect toblocks 822-836 in FIG. 8. Thereafter, or if NOT(R_i.M) AND NOT(R_j.M) isnot equivalent to zero in block 1014, the mechanism considers the nextpair of read ports (block 1018) and returns to block 1012 to repeat theloop for the next pair of read ports. If the mechanism has consideredthe last pair of read ports in block 1018, then operation ends.

FIG. 11 depicts example pseudo-code for the operations illustrated inFIG. 10 in accordance with an illustrative embodiment. This mechanismuses observability “don't care” conditions at arrayouts. An“observability don't care” condition is a condition for which aparticular value—in this case, the value present at an arrayout—is notobservable with respect to some fanout boundary. An example of such acondition is as follows: if every arrayout for a given port is ANDedwith a particular gate g_i, the inverse of gate g_i represents anobservability don't care condition because if NOT(g_i) holds, the valueof those arrayouts cannot be witnessed by fanout logic.

Such observability don't care conditions may be computed using varioustechniques. One simple technique is merely to check for an AND conditionat the output of arrayouts, consider the conjunction of terms aside fromthe arrayout itself as the inverse of the observability don't carecondition, and take the condition M for the entire set of arrayouts asthe conjunction of all such observability don't care conditions. Oncecomputed, the mechanism can check pair-wise if these observability don'tcare conditions are orthogonal across ports and merge such portsaccordingly. This is similar to the merging of read ports withorthogonal enables described with reference to FIGS. 8 and 9.

It is noteworthy again that the mechanism may merge an arbitrarily-largeset of pair-wise disjoint observability don't care condition read portsonto the same new array port, as follows from repeated application ofthis pair-wise technique.

FIG. 12 is a flowchart illustrating operation of a mechanism to tie readenables for a memory array in accordance with an illustrativeembodiment. Operation begins, and the mechanism receives an array, arr(block 1202). For each read port, R_i (block 1204), the mechanismidentifies a mask, M, for which all connected arrayouts of port R_i aremasked with respect to some fanout boundary (block 1206). The mechanismsimplifies the enable of R_i using NOT(M) as a “don't care” condition(block 1208). Then, the mechanism considers the next read port (block1210) and returns to block 1204 to repeat the loop for the next readport. If the mechanism has considered the last read port in block 1210,then operation ends.

FIG. 13 depicts example pseudo-code for the operations illustrated inFIG. 12 in accordance with an illustrative embodiment. This mechanismuses observability don't care conditions to simplify arrays. In thiscase, instead of merging read ports, the mechanism uses such conditionsto directly simplify read enable pins. Often, this transformation allowstying enable pins to 1, which may simplify other analysis, e.g.,preventing the need to ever model an arrayout as randomized.

FIG. 14 is a flowchart illustrating operation of a mechanism forbypassing write-before-read ports in a memory array in accordance withan illustrative embodiment. Operation begins, and the mechanism receivesan array, an (block 1402). The mechanism determines whether the array isa write-before-read array (block 1404). If the array is not awrite-before-read array, then operation ends.

If the mechanism determines that the array is a write-before-read arrayin block 1404, then for each read port R_i (block 1406), the mechanismchecks whether there exists any write port, W_j, that address matchesthe read port, and every time the read port is enabled the write port isalso enabled (block 1408). The mechanism determines whether such a writeport exists (block 1410). If such a write port exists, then for eachcolumn, if W_j data is connected, the mechanism merges R_i data for thecolumn onto W_j data (block 1412). Thereafter, or if no such write portexists in block 1410, the mechanism considers the next read port (block1414) and returns to block 1406 to repeat the loop for the next readport. If the mechanism has considered the last read port in block 1414,then operation ends.

FIG. 15 depicts example pseudo-code for the operations illustrated inFIG. 14 in accordance with an illustrative embodiment. This mechanismattempts to simplify write-before-read arrays by bypassing arrayouts towrite data. In particular, if there are any write ports that addressmatch a particular enabled read port, and every time that read port isenabled the write port is also enabled, the read port will always fetchthe write data. This sort of optimization may frequently be possible dueto cases where an array is conservatively created by a hardwaredescription language (HDL) compiler even though read values may beconcurrently determined without referring to prior assignments to thecorresponding signal.

FIG. 16 is a flowchart illustrating operation of a mechanism forconcatenation of memory arrays in accordance with an illustrativeembodiment. Operation begins, and the mechanism receives a netlist, N(block 1602). For each array in N, the mechanism generates and storesinitialization, write, and read port compatibility lists (block 1604).For each pair of arrays, arr1 and arr2 (block 1606), the mechanismdetermines whether arr1 and arr2 are the same type and compatible basedon their compatibility lists (block 1608). If arr1 and arr2 are the sametype and compatible (block 1608), then the mechanism concatenatesdefault initial values and data pins of each port of arr2 onto thecompatible port of arr1 (block 1610). Then, the mechanism disconnectsthe corresponding pins of arr2 (block 1612) and deletes arr2 (block1614). Thereafter, or if arr1 and arr2 are not the same type andcompatible in block 1608, the mechanism considers the next pair ofarrays (block 1616) and returns to block 1606 to repeat the loop for thenext pair of arrays. If the mechanism has considered the last pair ofarrays in block 1616, then operation ends.

FIG. 17 depicts example pseudo-code for the operations illustrated inFIG. 16 in accordance with an illustrative embodiment. This mechanism isfocused on reducing the number of arrays in the netlist, which isadvantageous because analysis frameworks benefit from the ability tomove more data with less evaluation of enable and address pins. Thistransformation consists of enumerating compatibility lists for eachport, although only with respect to enables and address pins. Afterenumeration, the mechanism looks for one-to-one compatibility of ports.If the mechanism finds such compatibility, then the mechanismdata-concatenates the corresponding array ports and eliminates one ofthe arrays.

FIG. 18 is a flowchart illustrating operation of a mechanism formigrating array read ports in accordance with an illustrativeembodiment. Operation begins, and the mechanism receives a netlist, N(block 1802). For each array in N, the mechanism generates and storesinitialization and write port obligation lists (block 1804). Note thatunlike the operation described with reference to FIG. 16, the mechanismdoes not check for read port obligations.

For each pair of arrays, arr1 and arr2 (block 1806), the mechanismdetermines whether arr1 and arr2 are the same type and are compatiblebased on their obligation lists (block 1808). If arr1 and arr2 are thesame type and compatible, the mechanism migrates all read ports fromarr2 to arr1 (block 1810) and deletes arr2 (block 1812). Thereafter, orif arr1 and arr2 are not the same type and compatible in block 1808, themechanism considers the next pair of arrays (block 1814) and returns toblock 1806 to repeat the loop for the next pair of arrays. If themechanism has considered the last pair of arrays in block 1814, thenoperation ends.

FIGS. 19A and 19B depict example pseudo-code for the operationsillustrated in FIG. 18 in accordance with an illustrative embodiment.This mechanism attempts to merge arrays in a different way, by migratingread ports across all arrays whose data are compatible. This generalizesredundancy removal approaches because it does not require read ports tobe compatible.

FIG. 20 is a flowchart illustrating operation of a mechanism to minimizeaddress bits in a memory array in accordance with an illustrativeembodiment. Operation begins, and the mechanism receives an array, arr(block 2002). The mechanism determines whether the number of addresspins is excessively large (block 2004). If the number of address pins isexcessively large in block 2004, the mechanism projects out the mostsignificant address bits (block 2006). Thereafter, or if the number ofaddress pins is not excessively large in block 2004, the mechanismdetermines whether any address bits have the same constant value acrossall read ports (block 2008). If any address bits have the same constantvalue across all read ports, the mechanism projects those address bitsout of the address (bock 2010). Thereafter, or if there are not anyaddress bits that have the same constant value in block 2008, themechanism computes a new number of rows (block 2012), and operationends.

FIGS. 21A and 21B depict example pseudo-code for the operationsillustrated in FIG. 20 in accordance with an illustrative embodiment.This mechanism reduces the number of address pins of any array in twoways. First, if the number of address pins is excessively large, e.g.,able to address twice or greater than twice the maximum number of rows,the mechanism projects out the most significant address bits byconjuncting the inverse of those most significant address bits with theenable for every port, so that accesses beyond the top row are dropped.Second, the mechanism checks if any address bits of all read ports arethe same constant value. If so, the mechanism projects those bits out ofthe address. In addition, the mechanism computes the new number of rowsacross these projections.

FIG. 22 is a flowchart illustrating operation of a mechanism for arraydeletion in accordance with an illustrative embodiment. Operationbegins, and the mechanism receives a netlist, N (block 2202). For eacharray, arr, in N (block 2204), the mechanism determines whether thearray has no read ports or no columns or zero rows (block 2206). If thearray has no read ports or no columns or zero rows, the mechanismdeletes the array (block 2208). Thereafter, or if the array has one ormore read ports and one or more columns and one or more rows in block2206, the mechanism considers the next array (block 2210) and returns toblock 2204 to repeat the loop for the next array. If the mechanism hasconsidered the last array in block 2210, then operation ends.

FIG. 23 depicts example pseudo-code for the operations illustrated inFIG. 22 in accordance with an illustrative embodiment. This mechanismprovides criteria by which the mechanism may delete an array, namely ifan array has no read ports, no rows, or no columns. The first conditionmay be a byproduct of other transformations, such as the transformationdescribed above with reference to FIGS. 16 and 17. The second conditionmay be a byproduct of transformations, such as the transformationdescribed above with reference to FIGS. 20 and 21. Note that in such acase, every address would be out-of-bounds, hence randomized.

The flowchart and block diagrams in the figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods and computer program products according to variousembodiments of the present invention. In this regard, each block in theflowchart or block diagrams may represent a module, segment, or portionof code, which comprises one or more executable instructions forimplementing the specified logical function(s). It should also be notedthat, in some alternative implementations, the functions noted in theblock may occur out of the order noted in the figures. For example, twoblocks shown in succession may, in fact, be executed substantiallyconcurrently, or the blocks may sometimes be executed in the reverseorder, depending upon the functionality involved. It will also be notedthat each block of the block diagrams and/or flowchart illustration, andcombinations of blocks in the block diagrams and/or flowchartillustration, can be implemented by special purpose hardware-basedsystems that perform the specified functions or acts, or combinations ofspecial purpose hardware and computer instructions.

The illustrative embodiments may be utilized in many different types ofdata processing environments including a distributed data processingenvironment, a single data processing device, or the like. In order toprovide a context for the description of the specific elements andfunctionality of the illustrative embodiments, FIGS. 24 and 25 areprovided hereafter as example environments in which aspects of theillustrative embodiments may be implemented. While the descriptionfollowing FIGS. 24 and 25 will focus primarily on a single dataprocessing device implementation, this is only an example and is notintended to state or imply any limitation with regard to the features ofthe present invention. To the contrary, the illustrative embodiments areintended to include distributed data processing environments andembodiments.

With reference now to the figures and in particular with reference toFIGS. 24 and 25, example diagrams of data processing environments areprovided in which illustrative embodiments of the present invention maybe implemented. It should be appreciated that FIGS. 24 and 25 are onlyexamples and are not intended to assert or imply any limitation withregard to the environments in which aspects or embodiments of thepresent invention may be implemented. Many modifications to the depictedenvironments may be made without departing from the spirit and scope ofthe present invention.

FIG. 24 depicts a pictorial representation of an example distributeddata processing system in which aspects of the illustrative embodimentsmay be implemented. Distributed data processing system 2400 may includea network of computers in which aspects of the illustrative embodimentsmay be implemented. The distributed data processing system 2400 containsat least one network 2402, which is the medium used to providecommunication links between various devices and computers connectedtogether within distributed data processing system 2400. The network2402 may include connections, such as wire, wireless communicationlinks, or fiber optic cables.

In the depicted example, server 2404 and server 2406 are connected tonetwork 2402 along with storage unit 2408. In addition, clients 2410,2412, and 2414 are also connected to network 2402. These clients 2410,2412, and 2414 may be, for example, personal computers, networkcomputers, or the like. In the depicted example, server 2404 providesdata, such as boot files, operating system images, and applications tothe clients 2410, 2412, and 2414. Clients 2410, 2412, and 2414 areclients to server 2404 in the depicted example. Distributed dataprocessing system 2400 may include additional servers, clients, andother devices not shown.

In the depicted example, distributed data processing system 2400 is theInternet with network 2402 representing a worldwide collection ofnetworks and gateways that use the Transmission ControlProtocol/Internet Protocol (TCP/IP) suite of protocols to communicatewith one another. At the heart of the Internet is a backbone ofhigh-speed data communication lines between major nodes or hostcomputers, consisting of thousands of commercial, governmental,educational and other computer systems that route data and messages. Ofcourse, the distributed data processing system 2400 may also beimplemented to include a number of different types of networks, such asfor example, an intranet, a local area network (LAN), a wide areanetwork (WAN), or the like. As stated above, FIG. 24 is intended as anexample, not as an architectural limitation for different embodiments ofthe present invention, and therefore, the particular elements shown inFIG. 24 should not be considered limiting with regard to theenvironments in which the illustrative embodiments of the presentinvention may be implemented.

With reference now to FIG. 25, a block diagram of an example dataprocessing system is shown in which aspects of the illustrativeembodiments may be implemented. Data processing system 2500 is anexample of a computer, such as client 2410 in FIG. 24, in which computerusable code or instructions implementing the processes for illustrativeembodiments of the present invention may be located.

In the depicted example, data processing system 2500 employs a hubarchitecture including north bridge and memory controller hub (NB/MCH)2502 and south bridge and input/output (I/O) controller hub (SB/ICH)2504. Processing unit 2506, main memory 2508, and graphics processor2510 are connected to NB/MCH 2502. Graphics processor 2510 may beconnected to NB/MCH 2502 through an accelerated graphics port (AGP).

In the depicted example, local area network (LAN) adapter 2512 connectsto SB/ICH 2504. Audio adapter 2516, keyboard and mouse adapter 2520,modem 2522, read only memory (ROM) 2524, hard disk drive (HDD) 2526,CD-ROM drive 2530, universal serial bus (USB) ports and othercommunication ports 2532, and PCI/PCIe devices 2534 connect to SB/ICH2504 through bus 2538 and bus 2540. PCI/PCIe devices may include, forexample, Ethernet adapters, add-in cards, and PC cards for notebookcomputers. PCI uses a card bus controller, while PCIe does not. ROM 2524may be, for example, a flash basic input/output system (BIOS).

HDD 2526 and CD-ROM drive 2530 connect to SB/ICH 2504 through bus 2540.HDD 2526 and CD-ROM drive 2530 may use, for example, an integrated driveelectronics (IDE) or serial advanced technology attachment (SATA)interface. Super I/O (SIO) device 2536 may be connected to SB/ICH 2504.

An operating system runs on processing unit 2506. The operating systemcoordinates and provides control of various components within the dataprocessing system 2500 in FIG. 25. As a client, the operating system maybe a commercially available operating system such as Microsoft® Windows®XP (Microsoft and Windows are trademarks of Microsoft Corporation in theUnited States, other countries, or both). An object-oriented programmingsystem, such as the Java™ programming system, may run in conjunctionwith the operating system and provides calls to the operating systemfrom Java™ programs or applications executing on data processing system2500 (Java is a trademark of Sun Microsystems, Inc. in the UnitedStates, other countries, or both).

As a server, data processing system 2500 may be, for example, an IBM®eServer™ System p® computer system, running the Advanced InteractiveExecutive (AIX®) operating system or the LINUX® operating system(eServer, System p, and AIX are trademarks of International BusinessMachines Corporation in the United States, other countries, or bothwhile LINUX is a trademark of Linus Torvalds in the United States, othercountries, or both). Data processing system 2500 may be a symmetricmultiprocessor (SMP) system including a plurality of processors inprocessing unit 2506. Alternatively, a single processor system may beemployed.

Instructions for the operating system, the object-oriented programmingsystem, and applications or programs are located on storage devices,such as HDD 2526, and may be loaded into main memory 2508 for executionby processing unit 2506. The processes for illustrative embodiments ofthe present invention may be performed by processing unit 2506 usingcomputer usable program code, which may be located in a memory such as,for example, main memory 2508, ROM 2524, or in one or more peripheraldevices 2526 and 2530, for example.

A bus system, such as bus 2538 or bus 2540 as shown in FIG. 25, may becomprised of one or more buses. Of course, the bus system may beimplemented using any type of communication fabric or architecture thatprovides for a transfer of data between different components or devicesattached to the fabric or architecture. A communication unit, such asmodem 2522 or network adapter 2512 of FIG. 25, may include one or moredevices used to transmit and receive data. A memory may be, for example,main memory 2508, ROM 2524, or a cache such as found in NB/MCH 2502 inFIG. 25.

Those of ordinary skill in the art will appreciate that the hardware inFIGS. 24 and 25 may vary depending on the implementation. Other internalhardware or peripheral devices, such as flash memory, equivalentnon-volatile memory, or optical disk drives and the like, may be used inaddition to or in place of the hardware depicted in FIGS. 24 and 25.Also, the processes of the illustrative embodiments may be applied to amultiprocessor data processing system, other than the SMP systemmentioned previously, without departing from the spirit and scope of thepresent invention.

Moreover, the data processing system 2500 may take the form of any of anumber of different data processing systems including client computingdevices, server computing devices, a tablet computer, laptop computer,telephone or other communication device, a personal digital assistant(PDA), or the like. In some illustrative examples, data processingsystem 2500 may be a portable computing device which is configured withflash memory to provide non-volatile memory for storing operating systemfiles and/or user-generated data, for example. Essentially, dataprocessing system 2500 may be any known or later developed dataprocessing system without architectural limitation.

Thus, the illustrative embodiments provide mechanisms in a designenvironment for minimizing memory array representations for enhancedsynthesis and verification. In one embodiment, the design environmentcomprises a mechanism to compress the width of arrays using disconnectedpin information. In another embodiment, the design environment comprisesa mechanism to simplify the enable conditions of array ports using“don't care” computations. In yet another embodiment, the designenvironment comprises a mechanism to reduce address pins from an arraythrough analysis of limitations of readable addresses.

The illustrative embodiments provide mechanisms in a design environmentfor eliminating, coalescing, or bypassing ports. In one embodiment, thedesign environment comprises a mechanism to eliminate unnecessary portsin arrays using disabled and disconnected pin information. In anotherembodiment, the design environment comprises a mechanism to combine andreduce the number of array ports using address comparisons. In anotherembodiment, the design environment comprises a mechanism to combine andreduce the number of array ports using disjoint enable comparisons. Inyet another embodiment, the design environment comprises a mechanism tocombine and reduce the number of array ports using “don't care”computations. In another embodiment, the design environment comprises amechanism to reduce the number of array ports through bypassingwrite-to-read paths around arrays.

The illustrative embodiments also provide mechanisms in a designenvironment for array concatenation. In one embodiment, the designenvironment comprises a mechanism to concatenate arrays with enable- andaddress-compatible ports, thereby reducing the number of arrays in anetlist. In another embodiment, the design environment comprises amechanism to migrate read ports from one array to another based uponcompatible enable-, address-, and data-compatible write ports, therebyreducing the number of arrays in a netlist. In yet another embodiment,the design environment comprises a mechanism to eliminate unnecessaryarrays.

As noted above, it should be appreciated that the illustrativeembodiments may take the form of an entirely hardware embodiment, anentirely software embodiment or an embodiment containing both hardwareand software elements. In one example embodiment, the mechanisms of theillustrative embodiments are implemented in software or program code,which includes but is not limited to firmware, resident software,microcode, etc.

A data processing system suitable for storing and/or executing programcode will include at least one processor coupled directly or indirectlyto memory elements through a system bus. The memory elements can includelocal memory employed during actual execution of the program code, bulkstorage, and cache memories which provide temporary storage of at leastsome program code in order to reduce the number of times code must beretrieved from bulk storage during execution.

Input/output or I/O devices (including but not limited to keyboards,displays, pointing devices, etc.) can be coupled to the system eitherdirectly or through intervening I/O controllers. Network adapters mayalso be coupled to the system to enable the data processing system tobecome coupled to other data processing systems or remote printers orstorage devices through intervening private or public networks. Modems,cable modems and Ethernet cards are just a few of the currentlyavailable types of network adapters.

The description of the present invention has been presented for purposesof illustration and description, and is not intended to be exhaustive orlimited to the invention in the form disclosed. Many modifications andvariations will be apparent to those of ordinary skill in the art. Theembodiment was chosen and described in order to best explain theprinciples of the invention, the practical application, and to enableothers of ordinary skill in the art to understand the invention forvarious embodiments with various modifications as are suited to theparticular use contemplated.

1. A method, in a data processing system, for minimizing memory arrayrepresentations, the method comprising: receiving, in the dataprocessing system, an integrated circuit design having a plurality ofmemory arrays; reducing, by the data processing system, a number ofmemory arrays in the integrated circuit design to form a reducedintegrated circuit design; and performing, by the data processingsystem, synthesis or verification on the reduced integrated circuitdesign.
 2. The method of claim 1, wherein reducing the number of memoryarrays in the integrated circuit design comprises: for each memory arrayin the integrated circuit design, forming a compatibility signature overaddress and enable pins for all ports; identifying a first memory arrayand a second memory array, wherein the first memory array and the secondmemory array are of the same type and are compatible based on theircompatibility signatures; concatenating default initial values and datapins of each port of the second memory array onto compatible ports ofthe first memory array; and disconnecting the initial value pins anddata pins of the second memory array.
 3. The method of claim 2, whereinforming the compatibility signature over address and enable pins for agiven memory array comprises generating and storing an initializationport compatibility list, a write port compatibility list, and a readport compatibility list; and wherein identifying a first memory arrayand a second memory array comprises determining that the initializationport compatibility list of the first array is compatible with theinitialization port compatibility list of the second array and the writeport compatibility list of the first array is compatible with the writeport compatibility list of the second array and the read portcompatibility list of the first array is compatible with the read portcompatibility list of the second array.
 4. The method of claim 1,wherein reducing the number of memory arrays in the integrated circuitdesign comprises: for each memory array in the integrated circuitdesign, forming a compatibility signature over address and enable pinsfor all ports; identifying a first memory array and a second memoryarray, wherein the first memory array and the second memory array are ofthe same type, default initial values of the first memory array arecompatible with default initial values of the second memory array, andthe first memory array and the second memory array are compatible basedon their compatibility signatures; migrating all read ports from thesecond memory array to the first memory array; and deleting the secondmemory array.
 5. The method of claim 4, wherein forming a compatibilitysignature over address and enable pins for all ports comprisesgenerating and storing an initialization port obligation list and awrite port obligation list; and wherein identifying the first memoryarray and the second memory array comprises determining whether theinitialization port obligation list of the first memory array iscompatible with the initialization port obligation list of the secondmemory array and the write port obligation list of the first memoryarray is compatible with the write port obligation list of the secondmemory array.
 6. The method of claim 1, wherein reducing the number ofmemory arrays in the integrated circuit design comprises: identifying amemory array having no read ports or no columns or a number of rowsequal to zero; and deleting the identified memory array.
 7. A computerprogram product comprising a computer readable storage medium having acomputer readable program stored therein, wherein the computer readableprogram, when executed on a computing device, causes the computingdevice to: receive, in the computing device, an integrated circuitdesign having a plurality of memory arrays; reduce, by the computingdevice, a number of memory arrays in the integrated circuit design toform a reduced integrated circuit design; and perform, by the computingdevice, synthesis or verification on the reduced integrated circuitdesign.
 8. The computer program product of claim 7, wherein reducing thenumber of memory arrays in the integrated circuit design comprises: foreach memory array in the integrated circuit design, forming acompatibility signature over address and enable pins for all ports;identifying a first memory array and a second memory array, wherein thefirst memory array and the second memory array are of the same type andare compatible based on their compatibility signatures; concatenatingdefault initial values and data pins of each port of the second memoryarray onto compatible ports of the first memory array; and disconnectingthe initial value pins and data pins of the second memory array.
 9. Thecomputer program product of claim 8, wherein forming the compatibilitysignature over address and enable pins for a given memory arraycomprises generating and storing an initialization port compatibilitylist, a write port compatibility list, and a read port compatibilitylist; and wherein identifying a first memory array and a second memoryarray comprises determining that the initialization port compatibilitylist of the first array is compatible with the initialization portcompatibility list of the second array and the write port compatibilitylist of the first array is compatible with the write port compatibilitylist of the second array and the read port compatibility list of thefirst array is compatible with the read port compatibility list of thesecond array.
 10. The computer program product of claim 7, whereinreducing the number of memory arrays in the integrated circuit designcomprises: for each memory array in the integrated circuit design,forming a compatibility signature over address and enable pins for allports; identifying a first memory array and a second memory array,wherein the first memory array and the second memory array are of thesame type, default initial values of the first memory array arecompatible with default initial values of the second memory array, andthe first memory array and the second memory array are compatible basedon their compatibility signatures; migrating all read ports from thesecond memory array to the first memory array; and deleting the secondmemory array.
 11. The computer program product of claim 10, whereinforming a compatibility signature over address and enable pins for allports comprises generating and storing an initialization port obligationlist and a write port obligation list; and wherein identifying the firstmemory array and the second memory array comprises determining whetherthe initialization port obligation list of the first memory array iscompatible with the initialization port obligation list of the secondmemory array and the write port obligation list of the first memoryarray is compatible with the write port obligation list of the secondmemory array.
 12. The computer program product of claim 7, whereinreducing the number of memory arrays in the integrated circuit designcomprises: identifying a memory array having no read ports or no columnsor a number of rows equal to zero; and deleting the identified memoryarray.
 13. The computer program product of claim 7, wherein the computerreadable program is stored in a computer readable storage medium in adata processing system and wherein the computer readable program wasdownloaded over a network from a remote data processing system.
 14. Thecomputer program product of claim 7, wherein the computer readableprogram is stored in a computer readable storage medium in a server dataprocessing system and wherein the computer readable program isdownloaded over a network to a remote data processing system for use ina computer readable storage medium with the remote system.
 15. Anapparatus, comprising: a processor; and a memory coupled to theprocessor, wherein the memory comprises instructions which, whenexecuted by the processor, cause the processor to: receive an integratedcircuit design having a plurality of memory arrays; reduce a number ofmemory arrays in the integrated circuit design to form a reducedintegrated circuit design; and perform synthesis or verification on thereduced integrated circuit design.
 16. The apparatus of claim 15,wherein reducing the number of memory arrays in the integrated circuitdesign comprises: for each memory array in the integrated circuitdesign, forming a compatibility signature over address and enable pinsfor all ports; identifying a first memory array and a second memoryarray, wherein the first memory array and the second memory array are ofthe same type and are compatible based on their compatibilitysignatures; concatenating default initial values and data pins of eachport of the second memory array onto compatible ports of the firstmemory array; and disconnecting the initial value pins and data pins ofthe second memory array.
 17. The apparatus of claim 16, wherein formingthe compatibility signature over address and enable pins for a givenmemory array comprises generating and storing an initialization portcompatibility list, a write port compatibility list, and a read portcompatibility list; and wherein identifying a first memory array and asecond memory array comprises determining that the initialization portcompatibility list of the first array is compatible with theinitialization port compatibility list of the second array and the writeport compatibility list of the first array is compatible with the writeport compatibility list of the second array and the read portcompatibility list of the first array is compatible with the read portcompatibility list of the second array.
 18. The apparatus of claim 15,wherein reducing the number of memory arrays in the integrated circuitdesign comprises: for each memory array in the integrated circuitdesign, forming a compatibility signature over address and enable pinsfor all ports; identifying a first memory array and a second memoryarray, wherein the first memory array and the second memory array are ofthe same type, default initial values of the first memory array arecompatible with default initial values of the second memory array, andthe first memory array and the second memory array are compatible basedon their compatibility signatures; migrating all read ports from thesecond memory array to the first memory array; and deleting the secondmemory array.
 19. The apparatus of claim 18, wherein forming acompatibility signature over address and enable pins for all portscomprises generating and storing an initialization port obligation listand a write port obligation list; and wherein identifying the firstmemory array and the second memory array comprises determining whetherthe initialization port obligation list of the first memory array iscompatible with the initialization port obligation list of the secondmemory array and the write port obligation list of the first memoryarray is compatible with the write port obligation list of the secondmemory array.
 20. The apparatus of claim 15, wherein reducing the numberof memory arrays in the integrated circuit design comprises: identifyinga memory array having no read ports or no columns or a number of rowsequal to zero; and deleting the identified memory array.